package service;

import java.util.List;

import org.springframework.security.annotation.Secured;

import persistence.model.TdfkfaBasicInvest;
import persistence.model.TdfkfaBasicScxmgk;
import persistence.model.TdfkfaBasicXmqntdphlx;
import persistence.model.TdfkfaBasicXmqtdlyxz;
import persistence.model.TdfkfaBasicYqfkmj;
import persistence.model.TdfkfaComposeUnit;
import persistence.model.TdfkfaMain;
import persistence.model.TdfkfaPrjDxtp;
import persistence.model.TdfkfaPrjExperts;
import persistence.model.TdfkfaPrjFafj;
import persistence.model.TdfkfaPrjPsyj;
import presentation.extendmodel.PlanDetailModel;
import presentation.extendmodel.TdfkfaMainEx;
import presentation.extendmodel.TdfkfaPrjExpertsEx;
import presentation.queryvo.PlanListQueryVO;

public interface PlanService {

    public List<TdfkfaMainEx> getPlanList(PlanListQueryVO queryVO);
    
    public PlanDetailModel getPlanDetail(String planId);
    
    /**
     * 取得已提交方案的数据
     * @param queryVO<br>
     *  包括：unit 单位<br>
     *        xzCode 性质<br>
     *        kzCode 矿种<br>
     *        scztCode 审查次数 "1":对应SCZT第一次未审; "2":对应SCZT第二次未审; "3":对应SCZT第三次未审
     * @return 已提交方案数据
     */
    @Secured("ROLE_UNITADMIN")
    public List<TdfkfaMainEx> getSubmittedPlanList(PlanListQueryVO queryVO, int pageIndex, int pageSize);
    
    /**
     * 取得已提交方案的数量
     * @param queryVO<br>
     *  包括：unit 单位<br>
     *        xzCode 性质<br>
     *        kzCode 矿种<br>
     *        scztCode 审查次数 "1":对应SCZT第一次未审; "2":对应SCZT第二次未审; "3":对应SCZT第三次未审
     * @return 已提交方案数量
     */
    @Secured("ROLE_UNITADMIN")
    public int countSubmittedPlan(PlanListQueryVO queryVO);
    
    /**
     * 通过提交的方案
     * @param planId 方案索引
     * @return 修改记录数
     */
    @Secured("ROLE_UNITADMIN")
    public int passSubmittedPlan(String planId);
    
    /**
     * 返修提交的方案
     * @param planId 方案索引
     * @return 修改记录数
     */
    @Secured("ROLE_UNITADMIN")
    public int rejectSubmittedPlan(String planId);
    
    /**
     * 删除提交的方案
     * @param planId 方案索引
     * @return 修改记录数
     */
    @Secured("ROLE_UNITADMIN")
    public int deleteSubmittedPlan(String planId);
    
    /**
     * 取得送审方案的数据
     * 
     * @param queryVO
     * <br>
     *            包括：unit 单位<br>
     *            scztCode 审查次数 "1":对应SCZT第一次未审; "2":对应SCZT第二次未审;
     *            "3":对应SCZT第三次未审
     * @return 送审方案数据
     */
    @Secured("ROLE_UNITADMIN")
    public List<TdfkfaMainEx> getNeedJudgePlanList(PlanListQueryVO queryVO, int pageIndex, int pageSize);
    
    /**
     * 取得送审方案的数量
     * 
     * @param queryVO
     * <br>
     *            包括：unit 单位<br>
     *            scztCode 审查次数 "1":对应SCZT第一次未审; "2":对应SCZT第二次未审;
     *            "3":对应SCZT第三次未审
     * @return 送审方案数量
     */
    @Secured("ROLE_UNITADMIN")
    public int countNeedJudgePlan(PlanListQueryVO queryVO);
    
    /**
     * 取得已结束评审的数据
     * 
     * @return 已结束评审方案数据
     */
    @Secured("ROLE_UNITADMIN")
    public List<TdfkfaMainEx> getJudgedPlanList(PlanListQueryVO queryVO, int pageIndex, int pageSize);
    
    /**
     * 取得已结束评审的数量
     * 
     * @return 已结束评审方案数量
     */
    @Secured("ROLE_UNITADMIN")
    public int countJudgedPlan(PlanListQueryVO queryVO);
    
    @Secured(value = {"ROLE_UNITADMIN", "ROLE_ADMIN"})
    public List<TdfkfaPrjPsyj> getPlanJudgeResult(String planId);
    
    @Secured("ROLE_UNITADMIN")
    public int assignExpert(TdfkfaPrjExperts prjExpert);
    
    @Secured("ROLE_UNITADMIN")
    public TdfkfaPrjExpertsEx getAssignedExpert(String planId);
    
    /**
     * 专家查看自己在审方案
     * @param expertId
     * @return
     */
    @Secured("ROLE_EXPERTUSER")
    public List<TdfkfaMainEx> getOwnJudgingPlanList(Integer expertId);
    
    /**
     * 查看所有方案
     * @param queryVO<br>
     *  包括：unit 单位<br>
     * @return
     */
    @Secured("ROLE_UNITADMIN")
    public List<TdfkfaMainEx> getAllPlanList(PlanListQueryVO queryVO, int pageIndex, int pageSize);
    
    /**
     * 查看所有方案数量
     * @param queryVO<br>
     *  包括：unit 单位<br>
     * @return 所有方案数量
     */
    @Secured("ROLE_UNITADMIN")
    public int countAllPlan(PlanListQueryVO queryVO);
    
    /**
     * 保存方案基本信息
     * @param main 方案基本信息
     * @return 成功返回方案ID；失败返回null
     */
    @Secured("ROLE_PLANUSER")
    public Integer savePlanBasic(TdfkfaMain main);
    
    /**
     * 保存方案破坏类型信息
     * @param phlx 方案破坏类型信息
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_PLANUSER")
    public int savePlanPhlx(TdfkfaBasicXmqntdphlx phlx);

    /**
     * 保存方案生产项目概况信息
     * @param xmgk 生产项目概况信息
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_PLANUSER")
    public int savePlanXmgk(TdfkfaBasicScxmgk xmgk);

    /**
     * 保存方案复垦面积信息
     * @param fkmj 复垦面积信息
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_PLANUSER")
    public int savePlanFkmj(TdfkfaBasicYqfkmj fkmj);

    /**
     * 保存方案利用现状信息
     * @param lyxz 利用现状信息
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_PLANUSER")
    public int savePlanLyxz(TdfkfaBasicXmqtdlyxz lyxz);

    /**
     * 保存方案复垦投资信息
     * @param fktz 复垦投资信息
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_PLANUSER")
    public int savePlanFktz(TdfkfaBasicInvest fktz);
    
    /**
     * 获得项目基本信息
     * @param planId
     * @return
     */
    @Secured(value = {"ROLE_PLANUSER", "ROLE_UNITADMIN"} )
    public TdfkfaMain getPlanMain(Integer planId);
    
    /**
     * 获得破坏类型
     * @param planId
     * @return
     */
    @Secured(value = {"ROLE_PLANUSER", "ROLE_UNITADMIN"} )
    public TdfkfaBasicXmqntdphlx getPlanPhlx(Integer planId);
    
    /**
     * 获得项目概况
     * @param planId
     * @return
     */
    @Secured(value = {"ROLE_PLANUSER", "ROLE_UNITADMIN"} )
    public TdfkfaBasicScxmgk getPlanXmgk(Integer planId);
    
    /**
     * 获得复垦面积
     * @param planId
     * @return
     */
    @Secured(value = {"ROLE_PLANUSER", "ROLE_UNITADMIN"} )
    public TdfkfaBasicYqfkmj getPlanFkmj(Integer planId);
    
    /**
     * 获得土地复垦投资
     * @param planId
     * @return
     */
    @Secured(value = {"ROLE_PLANUSER", "ROLE_UNITADMIN"} )
    public TdfkfaBasicInvest getPlanFktz(Integer planId);
    
    /**
     * 获得土地利用现状
     * @param planId
     * @return
     */
    @Secured(value = {"ROLE_PLANUSER", "ROLE_UNITADMIN"} )
    public TdfkfaBasicXmqtdlyxz getPlanLyxz(Integer planId);
    
    /**
     * 获得典型图片
     * @param planId
     * @return
     */
    @Secured(value = {"ROLE_PLANUSER", "ROLE_UNITADMIN"} )
    public List<TdfkfaPrjDxtp> getPlanDxtp(Integer planId);

    /**
     * 保存方案附件信息
     * @param planId 方案ID
     * @param type 附件类型
     * @param url 地址
     * @param fjName 附件名
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_PLANUSER")
    public int saveFafj(Integer planId, String type, String url, String fjName);

    /**
     * 取得方案附件信息
     * @param planId 方案ID
     * @param type 附件类型
     * @return 方案附件信息
     */
    @Secured(value = {"ROLE_PLANUSER", "ROLE_UNITADMIN"} )
    public List<TdfkfaPrjFafj> loadFafj(Integer planId, String type);

    /**
     * 取得方案所有附件信息
     * @param planId 方案ID
     * @return 方案附件信息
     */
    @Secured(value = {"ROLE_PLANUSER", "ROLE_UNITADMIN"} )
    public List<TdfkfaPrjFafj> loadAllFafj(Integer planId);

    /**
     * 取得用户的方案信息
     * @param username 用户名
     * @return 方案信息
     */
    @Secured("ROLE_PLANUSER")
    public TdfkfaMainEx getOwnPlan(String username);
    
    public void deletePlan(Integer planId);

    /**
     * 保存方案典型图片信息
     * @param planId 方案ID
     * @param urlList 地址列表
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_PLANUSER")
    public int saveDxtp(Integer planId, List<String> urlList);

    /**
     * 保存方案编制单位信息
     * @param unit 方案编制单位信息
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_PLANUSER")
    public int savePlanUnit(TdfkfaComposeUnit unit);

    /**
     * 取得方案单位信息
     * @param planId 方案ID
     * @return 方案单位信息
     */
    @Secured(value = {"ROLE_PLANUSER", "ROLE_UNITADMIN"} )
    public TdfkfaComposeUnit getPlanUnit(Integer planId);

    /**
     * 保存评审方案信息
     * @param psyj
     * @param username
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_EXPERTUSER")
    public int savePlanResult(TdfkfaPrjPsyj psyj, String username);

    /**
     * 提交评审方案信息
     * @param planId
     * @param username
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_EXPERTUSER")
    public int submitPlanResult(Integer planId, String username);

    /**
     * 设定方案状态
     * @param planId 方案ID
     * @param sczt 审查状态
     * @param fazt 方案状态
     */
    @Secured("ROLE_UNITADMIN")
	public int setPlanState(Integer planId, String sczt, String fazt);

    /**
     * 提交方案
     * @param planId 方案ID
     */
    @Secured("ROLE_PLANUSER")
	public int submitPlan(Integer planId);

    /**
     * 取得评审中方案
     * @param queryVO
     * @param intPageIndex
     * @param intPageSize
     * @return 评审中方案
     */
    @Secured("ROLE_UNITADMIN")
    public List<TdfkfaMainEx> getJudgingPlanList(PlanListQueryVO queryVO, int intPageIndex, int intPageSize);

    /**
     * 取得评审中方案数量
     * @param queryVO
     * @return 评审中方案数量
     */
    @Secured("ROLE_UNITADMIN")
    public int countJudgingPlan(PlanListQueryVO queryVO);

    /**
     * 中心会评通过
     * @param planId 方案ID
     * @param hpyj   会评意见
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_UNITADMIN")
    public int passJudgedPlan(Integer planId, String hpyj);
    
    /**
     * 中心会评不通过
     * @param planId 方案ID
     * @param hpyj   会评意见
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_UNITADMIN")
    public int nopassJudgedPlan(Integer planId, String hpyj);
    
    /**
     * 修改重审
     * @param planId 方案ID
     * @param hpyj   会评意见
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_UNITADMIN")
    public int modifyJudgeJudgedPlan(Integer planId, String hpyj);

    /**
     * 取得中心评审通过方案数量
     * @param queryVO
     * @return 中心评审通过方案数量
     */
    @Secured(value = {"ROLE_UNITADMIN", "ROLE_ADMIN"} )
    public int countJudgePassedPlan(PlanListQueryVO queryVO);

    /**
     * 取得中心评审通过方案
     * @param queryVO
     * @return 中心评审通过方案
     */
    @Secured(value = {"ROLE_UNITADMIN", "ROLE_ADMIN"} )
    public List<TdfkfaMainEx> getJudgePassedPlanList(PlanListQueryVO queryVO, int intPageIndex, int intPageSize);

    /**
     * 耕保司审核通过方案
     * @param planId 方案ID
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_ADMIN")
    public int passPlan(Integer planId);

    /**
     * 耕保司审核不通过方案
     * @param planId 方案ID
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_ADMIN")
    public int nopassPlan(Integer planId);
    
    /**
     * 取得耕保司审查通过方案
     * @param queryVO
     * @return 耕保司审查通过方案
     */
    @Secured(value = {"ROLE_UNITADMIN", "ROLE_ADMIN"} )
    public List<TdfkfaMainEx> getScPassedPlanList(PlanListQueryVO queryVO, int intPageIndex, int intPageSize);
    
    /**
     * 取得耕保司审查通过方案数量
     * @param queryVO
     * @return 耕保司审查通过方案数量
     */
    @Secured(value = {"ROLE_UNITADMIN", "ROLE_ADMIN"} )
    public int countScPassedPlan(PlanListQueryVO queryVO);
    
    /**
     * 取得耕保司审查不通过方案
     * @param queryVO
     * @return 耕保司审查不通过方案
     */
    @Secured(value = {"ROLE_UNITADMIN", "ROLE_ADMIN"} )
    public List<TdfkfaMainEx> getScNopassedPlanList(PlanListQueryVO queryVO, int intPageIndex, int intPageSize);
    
    /**
     * 取得耕保司审查不通过方案数量
     * @param queryVO
     * @return 耕保司审查不通过方案数量
     */
    @Secured(value = {"ROLE_UNITADMIN", "ROLE_ADMIN"} )
    public int countScNopassedPlan(PlanListQueryVO queryVO);
    
    /**
     * 纸质报备
     * @param planId 方案ID
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_UNITADMIN")
    public int zzbb(Integer planId);
    
    /**
     * 取消纸质报备
     * @param planId 方案ID
     * @return 成功返回ServiceConstants.SUCCESS；失败返回ServiceConstants.SUCCESS
     */
    @Secured("ROLE_UNITADMIN")
    public int unZzbb(Integer planId);

}
